home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 22 / AACD 22.iso / AACD / Graphics / FlashMandel / Sources / Modules / Julia68K.S < prev    next >
Encoding:
Text File  |  2001-05-20  |  7.1 KB  |  103 lines

  1. ***********************************************************************************************
  2. **            Written by Dino Papararo            25-April-2001                               *
  3. **                                                                                            *
  4. **  FUNCTION                                                                                  *
  5. **                                                                                            *
  6. **    Julia -- perform Z = Z^2 + C iteration.                                                 *
  7. **                                                                                            *
  8. **  SYNOPSIS                                                                                  *
  9. **                                                                                            *
  10. **    WORD Julia (WORD Iterations,double Cre,double Cim)                                      *
  11. **                                                                                            *
  12. **                                                                                            *
  13. **  DESCRIPTION                                                                               *
  14. **                                                                                            *
  15. **  C equivalent function:                                                                    *
  16. **                                                                                            *
  17. **      ***************************************************************************************
  18. **      *WORD Julia (WORD Iterazioni,double Cre,double Cim,const double Jim,const double Jre)**
  19. **      *{                                                                                  ***
  20. **      *register double zr,zi,zi2,dist,maxdist;                                            ***
  21. **      *                                                                                   ***
  22. **      *  zi = Cim;                                                                        ***
  23. **      *                                                                                   ***
  24. **      *  zr = Cre;                                                                        ***
  25. **      *                                                                                   ***
  26. **      *  maxdist = 4;                                                                     ***
  27. **      *                                                                                   ***
  28. **      *  do {                                                                             ***
  29. **      *       zi2 = zi;                                                                   ***
  30. **      *                                                                                   ***
  31. **      *       zi  *= zr;                                                                  ***
  32. **      *                                                                                   ***
  33. **      *       zr  *= zr;                                                                  ***
  34. **      *                                                                                   ***
  35. **      *       zi2 *= zi2;                                                                 ***
  36. **      *                                                                                   ***
  37. **      *       dist = zr;                                                                  ***
  38. **      *                                                                                   ***
  39. **      *       dist += zi2;                                                                ***
  40. **      *                                                                                   ***
  41. **      *       if (dist > maxdist) return Iterazioni;                                      ***
  42. **      *                                                                                   ***
  43. **      *       zi += zi;                                                                   ***
  44. **      *                                                                                   ***
  45. **      *       zr -= zi2;                                                                  ***
  46. **      *                                                                                   ***
  47. **      *       zi += Jim;                                                                  ***
  48. **      *                                                                                   ***
  49. **      *       zr += Jre;                                                                  ***
  50. **      *                                                                                   ***
  51. **      *     } while (-- Iterazioni);                                                      ***
  52. **      *                                                                                   ***
  53. **      *  return 0;                                                                        ***
  54. **      *}                                                                                  ***
  55. **      ***************************************************************************************
  56. **                                                                                            *
  57. **  This function tests if a point belongs or not at Julia set                                *
  58. **                                                                                            *
  59. **  Optimized for pipelines of 68882+ coprocessors                                            *
  60. **                                                                                            *
  61. **  NOTICE: ALL VARIABLES ARE INTO REGISTERS FOR FULL SPEEEED                                 *
  62. **                                                                                            *
  63. **  d0:Iterations                                                                             *
  64. **                                                                                            *
  65. **  fp0:Cre/Zr fp1:Cim/Zi fp2:JKre fp3:JKim fp4:Zi2 fp5:Zr2/Dist fp6:MaxDist fp7:NotUsed ;-)  *
  66. ***********************************************************************************************
  67.  
  68. *        MACHINE  68060        
  69.  
  70.         XDEF  _Julia68K
  71.  
  72.         section data
  73.  
  74. Radius  dc.x  4.0
  75.  
  76.         section code
  77.  
  78. _Julia68K:
  79.                 
  80.         fmove.x Radius,fp6   * MaxDist = 4.0
  81.  
  82. Loop:
  83.         fmove.x fp1,fp4      * zi2   =  zi
  84.         fmul.x  fp0,fp1      * zi    =  zr * zi
  85.         fmul.x  fp0,fp0      * zr    =  zr * zr
  86.         fmul.x  fp4,fp4      * zi2  *=  zi2
  87.         fmove.x fp0,fp5      * dist  =  zr2
  88.         fadd.x  fp4,fp5      * dist +=  zi2
  89.         fcmp.x  fp6,fp5      * Compare  MaxDist & Dist
  90.         fbgt.w  Exit         * if Dist > MaxDist then goto exit
  91.         fadd.x  fp1,fp1      * zi   += zi
  92.         fsub.x  fp4,fp0      * zr   -= zi2
  93.         fadd.x  fp3,fp1      * zi   += JKim
  94.         fadd.x  fp2,fp0      * zr   += JKre
  95.  
  96.         dbra.w  d0,Loop      * if --Iterations != -1 go to Loop
  97.         clr.w   d0           * Iterations = 0
  98.  
  99. Exit:
  100.  
  101.         rts                  * return Iterations
  102.  
  103.         end